#!/bin/bash
# shellcheck disable=SC2086
# shellcheck disable=SC2155

# 检查参数
if [ "$#" -lt 3 ]; then
    echo "Usage: <language> <proto_dir> <out_dir>, e.g. build.sh go src target"
    exit 1
fi

LANGUAGE=$1
PROTO_DIR=$2
OUT_DIR=$3

PROTO_FILES=$(find ${PROTO_DIR} -iname "*.proto")
echo "Compiling protobuf files: ${PROTO_FILES}"

# 检查指定的语言
case $LANGUAGE in
    go)
        export PATH=$PATH:$(go env GOPATH)/bin
        GO_DIR=${OUT_DIR}/go
        mkdir -p ${GO_DIR}
        protoc -I=${PROTO_DIR} --go_out=${GO_DIR} ${PROTO_FILES}
        ;;
    java)
        JAVA_DIR=${OUT_DIR}/java
        mkdir -p ${JAVA_DIR}
        protoc -I=${PROTO_DIR} --java_out=${JAVA_DIR} ${PROTO_FILES}
        ;;
    python)
        PYTHON_DIR=${OUT_DIR}/python
        mkdir -p ${PYTHON_DIR}
        protoc -I=${PROTO_DIR} --python_out=${PYTHON_DIR} ${PROTO_FILES}
        ;;
    c)
        C_DIR=${OUT_DIR}/c
        mkdir -p ${C_DIR}
        protoc -I=${PROTO_DIR} --c_out=${C_DIR} ${PROTO_FILES}
        ;;
    nanopb)
        NANOPB_DIR=${OUT_DIR}/nano
        mkdir -p ${NANOPB_DIR}
        protoc -I=${PROTO_DIR} --plugin="protoc-gen-nanopb=/nanopb/generator/protoc-gen-nanopb" --nanopb_out=${NANOPB_DIR} ${PROTO_FILES}
        ;;
    cpp)
        CPP_DIR=${OUT_DIR}/cpp
        mkdir -p ${CPP_DIR}
        protoc -I=${PROTO_DIR} --cpp_out=${CPP_DIR} ${PROTO_FILES}
        ;;
    php)
        PHP_DIR=${OUT_DIR}/php
        mkdir -p $PHP_DIR
        protoc -I=${PROTO_DIR} --php_out=$PHP_DIR ${PROTO_FILES}
        ;;
    js)
        if [ "$#" -ne 4 ]; then
            echo "Usage: <language> <proto_dir> <out_dir> <file_name>"
            exit 1
        fi
        FILE_NAME=$4
        JS_DIR=${OUT_DIR}/js
        mkdir -p ${JS_DIR}
        pbjs -p ${PROTO_DIR} -t static-module -w es6 -o ${JS_DIR}/${FILE_NAME}.js ${PROTO_FILES}
        pbts -o ${JS_DIR}/${FILE_NAME}.d.ts ${JS_DIR}/${FILE_NAME}.js
        ;;
    *)
        echo "Unsupported language: $LANGUAGE"
        exit 1
        ;;
esac
